package integer;

/**
 * 包装类
 * java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型
 * 可以通过包装类的实例以对象的形式存在.
 * 其中数字类型的包装类都继承自java.lang.Number,而char和boolean的包装类直接继承自Object
 * Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字类型.
 */

public class IntegerDemo1 {
    public static void main(String[] args) {
   //基本类型转换为包装类
        int i=123;
        //java推荐我们是用包装类的静态方法valueOf将基本类型转换为包装类,而不是直接new
        Integer i1=Integer.valueOf(i);//Integer会重用-128-127之间的整数对象
        Integer i2=Integer.valueOf(i);
        System.out.println(i1==i2);//true
        System.out.println(i1.equals(i2));//true

        double dou=123.123;
        Double dou1=Double.valueOf(dou);//Double则是直接new
        Double dou2=Double.valueOf(dou);
        System.out.println(dou1=dou2);//false
        System.out.println(dou1.equals(dou2));
        //包装类转换为基本类型
        int in=i1.intValue();//获取包装类对象中表示的基本类型值
        double doub=i1.doubleValue();
        System.out.println(in);//123
        System.out.println(doub);//123.0

        in=dou1.intValue();//大类型转小类型可能存在丢精度
        doub=dou1.intValue();
        System.out.println(in);//123
        System.out.println(doub);//123.123

    }
}
